package com.jsbs.iam.user.mapper;


import com.jsbs.iam.user.entity.IamAdminRoleApplyInfo;
import com.jsbs.iam.user.entity.IamApplySystem;
import com.jsbs.iam.user.vo.AdminRoleApplyVo;
import com.jsbs.iam.user.vo.IamApplyVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

@Mapper
public interface IamApplySystemMapper {
    int deleteByPrimaryKey(Long id);

    int insert(IamApplySystem record);

    int insertSelective(IamApplySystem record);

    IamApplySystem selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(IamApplySystem record);

    int updateByPrimaryKey(IamApplySystem record);

    /**
     * 根据应用编码查询应用信息
     * @param applyCodeList
     * @return
     */
    List<IamApplySystem> getApplySystem (@Param("applyCodeList") List<String> applyCodeList);

    /**
     * 查询应用系统所有应用名称
     * @return
     */
    List<String> getApplySystemAll ();

    /**
     * 查询所有应用基础数据和对应的应用系统数据
     * @param
     * @return
     */
    List<IamApplyVo> getAppTypeCode (@Param("applyCodeOrName") String applyCodeOrName,
                                     @Param("companyCode") String companyCode);

    /**
     * 功能描述：获取当前租户下所有应用列表
     * @param companyCode
     * @return
     */
    List<IamApplySystem> queryList(@Param("companyCode") String companyCode);

    /**
     * 功能描述：获取应用权限列表
     * @param roleId
     * @return
     */
    List<AdminRoleApplyVo> getApplyList(@Param("roleId") Long roleId);

    /**
     * 功能描述：批量删除应用权限
     * @param id
     */
    void deleteByRoleId(@Param("roleId") Long id);

    /**
     * 功能描述：批量新增应用权限
     * @param applyInfoList
     */
    void batchInsertAdminApply(@Param("list") List<IamAdminRoleApplyInfo> applyInfoList);

    /**
     * 通过应用编码或者应用名称搜索登录策略（模糊搜索）
     * @param applyCodeOrName
     * @return
     */
    List<IamApplyVo> getApplyCodeOrName (@Param("applyCodeOrName") String applyCodeOrName);

    /**
     * 根据应用名称查询应用编码
     * @param applyName
     * @return
     */
    String getApplyTypeCode (@Param("applyName") String applyName);

    /**
     * 根据应用编码查询应用名称
     * @param applyTypeCode
     * @return
     */
    String getApplyName (@Param("applyCode") String applyTypeCode);

    /**
     * 功能描述：根据服务域名获取应用信息
     * @param requestUrl
     * @return
     */
    IamApplySystem queryByRequestUrl(@Param("requestUrl") String requestUrl);

    /**
     * 功能描述：根据应用类型编码获取应用列表
     * @param typeCodeList
     * @return
     */
    List<IamApplySystem> queryByTypeCode(@Param("typeCodeList") List<String> typeCodeList);

    /**
     * 功能描述：根据应用类型编码获取应用列表
     * @param companyCode
     * @param applyTypeCode
     * @return
     */
    List<IamApplySystem> queryByApplyTypeCode(@Param("companyCode") String companyCode, @Param("applyTypeCode") String applyTypeCode);

    /**
     * 功能描述：根据应用编码查询应用相关信息
     * param：applyCodes
     * param：companyCode
     * @return List<IamApplySystem>
     */
    List<IamApplySystem> queryApplySystemByApplyCode(@Param("applyCodes")Set<String> applyCodes, @Param("companyCode")String companyCode);



}